(function($) {
	/**
	 * 路由原生器
	 * @type {VueRouter}
	 */
	$.router = null;

	/**
	 * 保留当前页面，跳转到应用内的某个页面
	 * @param {{url:String,}} options
	 * @return {Promise}
	 */
	$.define('navigateTo', function(options) {
		return new Promise((resolve, reject) => {
			if ($.router) {
				$.router.push(options.url, resolve, reject);
			} else {
				window.location.href = options.url;
			}
		}, options);
	});

	/**
	 * 关闭当前页面，跳转到应用内的某个页面
	 * @param {{url:String,}} options
	 * @return {Promise}
	 */
	$.define('redirectTo', function(options) {
		return new Promise((resolve, reject) => {
			if ($.router) {
				$.router.replace(options.url, resolve, reject);
			} else {
				window.location.replace(options.url);
			}
		}, options);
	});

	/**
	 * 关闭所有页面，跳转到应用内的某个页面
	 * @param {{url:String,}} options
	 */
	$.define('reLaunch', function(options) {
		if ($.router) {
			$.navigateBack($.router.getMatchedComponents().length);
			$.redirectTo(options);
		} else {
			window.history.go(-window.history.length);
			window.location.replace(options.url);
		}
	});

	/**
	 * 关闭当前页面，返回上一页面或多级页面
	 * @param {Number} delta
	 */
	$.define('navigateBack', function(delta = 1) {
		if ($.router) {
			$.router.go(-delta);
		} else {
			window.history.go(-delta);
		}
	});

	/**
	 * 向前一页或多页
	 * @param {Number} delta
	 */
	$.define('navigateForward', function(delta = 1) {
		if ($.router) {
			$.router.go(delta);
		} else {
			window.history.go(delta);
		}
	});
})($);
